// architected loop to purge the entire TLB, should use
// base = stride1 = stride2 = 0, count0 = count 1 = 1
- vcpu_flush_vtlb_all ();
+ vcpu_flush_vtlb_all(current);
return IA64_NO_FAULT;
}
}
-void vcpu_flush_vtlb_all (void)
+void vcpu_flush_vtlb_all(struct vcpu *v)
{
- struct vcpu *v = current;
-
/* First VCPU tlb. */
vcpu_purge_tr_entry(&PSCBX(v,dtlb));
vcpu_purge_tr_entry(&PSCBX(v,itlb));
check this. */
}
+static void __vcpu_flush_vtlb_all(void *vcpu)
+{
+ vcpu_flush_vtlb_all((struct vcpu*)vcpu);
+}
+
void domain_flush_vtlb_all (void)
{
int cpu = smp_processor_id ();
continue;
if (v->processor == cpu)
- vcpu_flush_vtlb_all ();
+ vcpu_flush_vtlb_all(v);
else
- smp_call_function_single
- (v->processor,
- (void(*)(void *))vcpu_flush_vtlb_all,
- NULL,1,1);
+ smp_call_function_single(v->processor,
+ __vcpu_flush_vtlb_all,
+ v, 1, 1);
}
}
*/
/* Local all flush of vTLB. */
-void vcpu_flush_vtlb_all (void);
+void vcpu_flush_vtlb_all(struct vcpu *v);
/* Local range flush of machine TLB only (not full VCPU virtual TLB!!!) */
void vcpu_flush_tlb_vhpt_range (u64 vadr, u64 log_range);